package com.springtest.demo.dao;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;


public class BaseDao {
	@Resource(name="sessionFactory")
	protected SessionFactory sessionFactory;
	
	protected Session getSession(){
		return sessionFactory.getCurrentSession();
	}
	
	public int add(Object obj){
		return (Integer) getSession().save(obj);
	}
	
	public void update(Object obj){
		getSession().update(obj);
		getSession().flush();
	}
	
	public void delete(Class c,int id){
		getSession().delete(findById(c, id));
		getSession().flush();
	}
	
	public void delete(Object obj){
		getSession().delete(obj);
		getSession().flush();
	}
	
	public Object findById(Class c,int id){
		return getSession().get(c, id);
	}
	
	public List findAll(Class c){
		return getSession().createQuery("from " + c.getName()).list();
	}
	
	/**
	 * 分页查询
	 * @param hql 查询语句
	 * @param page 页号
	 * @param size 页大小
	 * @param objs 参数列表
	 * @return
	 */
	public List page(String hql,Integer page,Integer size,ArrayList<Object> objs){
		Query query = getSession().createQuery(hql);
		if(objs!=null){
			for(int i=0;i<objs.size();i++){
				query.setParameter(i, objs.get(i));
			}
		}
		
		if(page != null && size != null){
			query.setFirstResult((page - 1) * size).setMaxResults(size);
		}
		return query.list();
		
	}
	
	/**
	 * 	按条件删除、或修改
	 * @param hql
	 * @param objs
	 * @return
	 */
	public int executeUpdate(String hql,Object...objs){
		Query query = getSession().createQuery(hql);
		if(objs!=null){
			for (int i = 0; i < objs.length; i++) {
				query.setParameter(i, objs[i]);
			}
		}
		return query.executeUpdate();
	}
	
	
	
}
